Conv 卷积层 | 您所在的位置:网站首页 › conv stride › Conv 卷积层 |
onv 卷积层 一.why CNN for image ? 1.Some Patterns are much smaller than the whole image. 一些模式比起整张图片来说更小,即寻找模式不用看完整的图像。 2.The same patterns appear in different regions. 同一个模式可能会出现在不同的区域。 3.Subsamping the pixels will not change the object. 子采样不会改变物体。 1&2--> Convolution 3-->Pooling 二.作用 提取特征。 三.具体计算过程 卷积主要有两个特征:局部连接以及权值共享。 参数量:单层卷积层总参数=卷积核个数*(卷积核尺寸+偏置项) 卷积核个数一般通过该卷积层参数设置,卷积核尺寸为Filter*Filter(该层设置参数)*上一层通道数(无需设置),偏置项为1。 (全连接层是节点数相乘。) 卷积的计算量: (对于某个卷积层,它的FLOPs数量为:考虑偏置项的话, 其中num_params表示该层参数的数目。) (全连接层:BxMxN , B是batch size,M是输入形状,N是输出形状。) 四.输入输出分析 五.caffe中的卷积实现 caffe是展开成向量实现 对通道为C,高和宽分别为H、W的图像,在每一个位置上,划分一个KxK大小的patch,算上通道数,那就是CxKxK大小的patch,一共有HxW个patch: 这样就完成了由图像到矩阵的转化,这种操作在matlab中叫做im2col。需要注意的是,因为每一个像素点都对应一个patch,可以看成patch区域在图像上滑动,滑动的过程是有重叠的,转化所得的矩阵大小大于原图像。 与此同时,将滤波器转化成矩阵形式。 最后一页没画,但是基本上就是Filter Matrix乘以Feature Matrix的转置,得到输出矩阵Cout x (H x W),就可以解释为输出的三维Blob(Cout x H x W)。 这样,卷积就可以转化为矩阵乘法(Gemm in BLAS)问题,调用GEMM(Generalized Matrix Multiplication)对两矩阵内积。BLAS有许多性能优良的库,而且由分销商Intel和Nvidia针对所有平台进行优化。 ②Group ConvolutionGroup Convolution分组卷积,最早见于AlexNet——2012年Imagenet的冠军方法,Group Convolution被用来切分网络,使其在2个GPU上并行运行,AlexNet网络结构如下: 常规卷积:如果输入feature map尺寸为C∗H∗W,卷积核有N个,输出feature map与卷积核的数量相同也是N,每个卷积核的尺寸为C∗K∗K,N个卷积核的总参数量为N∗C∗K∗K,输入map与输出map的连接方式如下图左所示, Group Convolution顾名思义,则是对输入feature map进行分组,然后每组分别卷积。假设输入feature map的尺寸仍为C∗H∗W,输出feature map的数量为N个,如果设定要分成G个groups,则每组的输入feature map数量为CG,每组的输出feature map数量为NG,每个卷积核的尺寸为CG∗K∗K,卷积核的总数仍为N个,每组的卷积核数量为NG,卷积核只与其同组的输入map进行卷积,卷积核的总参数量为N∗CG∗K∗K,可见,总参数量减少为原来的 1G,其连接方式如上图右所示,group1输出map数为2,有2个卷积核,每个卷积核的channel数为4,与group1的输入map的channel数相同,卷积核只与同组的输入map卷积,而不与其他组的输入map卷积。 用途: 1.减少参数量,分成G组,则该层的参数量减少为原来的1G 2.Group Convolution可以看成是structured sparse,每个卷积核的尺寸由C∗K∗K变为CG∗K∗K,可以将其余(C−CG)∗K∗K的参数视为0,有时甚至可以在减少参数量的同时获得更好的效果(相当于正则)。 3.当分组数量等于输入map数量,输出map数量也等于输入map数量,即G=N=C、N个卷积核每个尺寸为1∗K∗K时,Group Convolution就成了Depthwise Convolution,参见MobileNet和Xception等,参数量进一步缩减,如下图所示 4.更进一步,如果分组数G=N=C,同时卷积核的尺寸与输入map的尺寸相同,即K=H=W,则输出map为C∗1∗1即长度为C的向量,此时称之为Global Depthwise Convolution(GDC),见MobileFaceNet,可以看成是全局加权池化,与 Global Average Pooling(GAP) 的不同之处在于,GDC 给每个位置赋予了可学习的权重(对于已对齐的图像这很有效,比如人脸,中心位置和边界位置的权重自然应该不同),而GAP每个位置的权重相同,全局取个平均,如下图所示: ③深度可分离卷积(depthwise separable convolution)在可分离卷积(separable convolution)中,通常将卷积操作拆分成多个步骤。而在神经网络中通常使用的就是深度可分离卷积(depthwise separable convolution)。 举个例子,假设有一个3×3大小的卷积层,其输入通道为16、输出通道为32。 那么一般的操作就是用32个3×3的卷积核来分别同输入数据卷积,这样每个卷积核需要3×3×16个参数,得到的输出是只有一个通道的数据。之所以会得到一通道的数据,是因为刚开始3×3×16的卷积核的每个通道会在输入数据的每个对应通道上做卷积,然后叠加每一个通道对应位置的值,使之变成了单通道,那么32个卷积核一共需要(3×3×16)×32 =4068个参数。 而应用深度可分离卷积的过程是①用16个3×3大小的卷积核(1通道)分别与输入的16通道的数据做卷积(这里使用了16个1通道的卷积核,输入数据的每个通道用1个3×3的卷积核卷积),得到了16个通道的特征图,我们说该步操作是depthwise(逐层)的,在叠加16个特征图之前,②接着用32个1×1大小的卷积核(16通道)在这16个特征图进行卷积运算,将16个通道的信息进行融合(用1×1的卷积进行不同通道间的信息融合),我们说该步操作是pointwise(逐像素)的。这样我们可以算出整个过程使用了3×3×16+(1×1×16)×32 =656个参数。 假设输入特征图大小为 D_F×D_F×M,输出特征图大小为 D_F×D_F×N,卷积核大小为 D_K×D_K,则传统卷积的计算量为: D_K×D_K×M×N×D_F×D_F 深度可分离卷积的计算量为深度卷积和 1×1 卷积的计算量之和: D_K×D_K×M×D_F×D_F+M×N×D_F×D_F 深度可分离卷积的优点 可以看出运用深度可分离卷积比普通卷积减少了所需要的参数。重要的是深度可分离卷积将以往普通卷积操作同时考虑通道和区域改变成,卷积先只考虑区域,然后再考虑通道。实现了通道和区域的分离。 ④Defomable Convolution可形变卷积的思想很巧妙:它认为规则形状的卷积核(比如一般用的正方形3*3卷积)可能会限制特征的提取,如果赋予卷积核形变的特性,让网络根据label反传下来的误差自动的调整卷积核的形状,适应网络重点关注的感兴趣的区域,就可以提取更好的特征。 |
CopyRight 2018-2019 实验室设备网 版权所有 |